/**
 * 
 */

package com.wutianyi.taskqueue.dao;

import java.util.List;

import com.wutianyi.taskqueue.constants.TaskStatus;

/**
 * @author wutianyi
 * 
 */
public interface TaskDao<T> {

	/**
	 * 增加任务
	 * 
	 * @param task
	 *            null 直接返回
	 */
	public void addTask(T task);

	/**
	 * 批量增加任务
	 * 
	 * @param tasks
	 *            null or empty 直接返回
	 */
	public void batchAddTasks(List<T> tasks, int status);

	/**
	 * 返回指定最大数量的任务
	 * 
	 * @param size
	 *            最大数量
	 * @param status
	 *            任务的状态
	 * @return 如果size == 0 返回一个空的列表
	 */
	public List<T> listTasks(int size, int status);

	/**
	 * 返回指定最大数量的任务,并且将状态修改为newstatus
	 * 
	 * @param size
	 * @param status
	 * @param newStatus
	 * @return 如果size == 0 返回一个空的列表
	 */
	public List<T> listTasksAndChangeStatus(int size, int status, TaskStatus newStatus);

	/**
	 * 批量更新任务的状态
	 * 
	 * @param taskIds
	 * @param newStatus
	 */
	public void updateTasksStatus(List<String> taskIds, int newStatus);

	/**
	 * 删除指定的任务
	 * 
	 * @param taskId
	 */
	public int removeTask(String taskId);

}
